package com.sign2024.sign2024project.test;

import com.intelligt.modbus.jlibmodbus.master.ModbusMaster;
import com.intelligt.modbus.jlibmodbus.master.ModbusMasterFactory;
import com.intelligt.modbus.jlibmodbus.tcp.TcpParameters;

import java.net.InetAddress;

public class JLibModbusExample {

    public static void main(String[] args) throws Exception {
        // 固定 IP 地址
        String ipAddress = "192.168.100.70";
        // Modbus 设备端口号，通常为 502
        int port = 502;
        // 从站地址
        int slaveId = 1;
        // 起始寄存器地址
        int startAddress = 0;
        // 要读取的寄存器数量
        int numberOfRegisters = 100;

        ModbusMaster master = null;

        try {
            // 将 IP 地址字符串转换为 InetAddress 对象
            InetAddress inetAddress = InetAddress.getByName(ipAddress);

            // 配置 TCP 参数
            TcpParameters tcpParameters = new TcpParameters();
            tcpParameters.setHost(inetAddress); // 使用 InetAddress 对象
            tcpParameters.setPort(port);

            // 创建 Modbus Master
            master = ModbusMasterFactory.createModbusMasterTCP(tcpParameters);

            // 连接到 Modbus 设备
            master.connect();

            // 读取保持寄存器
            int[] registers = master.readHoldingRegisters(slaveId, startAddress, numberOfRegisters);

            // 打印寄存器数据
            for (int i = 0; i < registers.length; i++) {
                System.out.println("Register " + (startAddress + i) + ": " + registers[i]);
            }

            // 80 温度
            int temperature = registers[80];
            System.out.println("温度：" + temperature / 100);
            
            // 66 湿度
            int humidity = registers[80];
            System.out.println("湿度：" + humidity / 100);

        } catch (Exception e) {
            System.err.println("Error: " + e.getMessage());
            System.err.println("Unknown host: " + ipAddress);
        } finally {
            // 关闭连接
            if (master != null) {
                master.disconnect();
            }
        }
    }
}